perm filename OUTPUT.SAI[PNT,HE]1 blob sn#326353 filedate 1978-01-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY
C00006 ENDMK
C⊗;
ENTRY;
BEGIN "OUTPUT"
REQUIRE "MACROS.SAI[PNT,HE]" SOURCE_FILE;


! display: cvgx,str_rt,str_vt.str_tr;

EXTERNAL STRING $BLANK;			
EXTERNAL PROCEDURE EULERO(REAL ARRAY XF;REFERENCE REAL W,PH,TH);
EXTERNAL REAL $EPS;
EXTERNAL INTEGER $BSKTAB,$BRCHR;


	! eliminates all the blanks characters in the string (to reduce 
	  the space when displayed);

INTERNAL SIMPLE STRING PROCEDURE CVGX(REAL R);
	BEGIN
	STRING S1,S2;
	S1←CVG(R);
	S2←SCAN(S1,$BSKTAB,$BRCHR);		! to cancel the spaces;
	RETURN(S2);	
	END;


	! returns a string with the rotation part;

INTERNAL STRING PROCEDURE STR_RT(REAL ARRAY XF;INTEGER NUM(1));  
						! num=1 for file,=4 for display;
	BEGIN
	REAL W,PH,TH;
	STRING RS,SCA;
	STRING PROCEDURE ROTFORM(STRING AXIS;REAL W);
		IF NUM=1 
		THEN RETURN("ROT("[NUM TO ∞]&AXIS[1 TO 5-NUM]&","&CVGX(W)
			&"*DEG)") 
		ELSE RETURN("ROT("[NUM TO ∞]&AXIS[1 TO 5-NUM]&","&CVGX(W)&")");

	EULERO(XF,W,PH,TH);
	RS←NULL;SCA←NULL;
	IF NUM=1 THEN SETFORMAT(0,5);
	IF ABS(TH)>$EPS THEN 
		BEGIN
		RS←RS&ROTFORM("ZHAT",TH);
		SCA←"*";
		END;
	IF ABS(PH)>$EPS THEN
		BEGIN
		RS←RS&SCA&ROTFORM("YHAT",PH);
		SCA←"*";
		END;
	IF ABS(W)>$EPS THEN
		BEGIN
		RS←RS&SCA&ROTFORM("ZHAT",W);
		SCA←"*";
		END;
	IF LENGTH(SCA)=0 THEN
		RS←RS&"NILROTN";
	SETFORMAT(0,3);
	RETURN(RS);
	END;

	! returns a string with the vector part for frame assignments;

INTERNAL SIMPLE  STRING PROCEDURE STR_VT(REAL X,Y,Z;INTEGER NUM(1));
	BEGIN			! num=1 for file,=8 for display;
	STRING VECTOR,INCH;
	IF ABS(X)<$EPS AND ABS(Y)<$EPS AND ABS(Z)<$EPS
	   THEN RETURN(IF NUM=1 THEN "NILVECT*INCHES" ELSE "NILVECT")
	   ELSE RETURN(" VECTOR("[NUM TO ∞]&CVGX(X)&","&CVGX(Y)&","&CVGX(Z)
			&")*INCHES"[1 TO 9-NUM]);
	END;

	! returns the trans part for the frame, whose values are in XF;

INTERNAL STRING PROCEDURE STR_TR(REAL ARRAY XF;INTEGER ROT(1),VECT(1));
	BEGIN				
		! rot=1,vect=1 for file,rot=4,vect=8 for display;
	REAL W,PH,TH,X,Y,Z; STRING RTPART,VTPART;
	RTPART←STR_RT(XF,ROT);
	X←XF[1,4];Y←XF[2,4];Z←XF[3,4];
	VTPART←STR_VT(X,Y,Z,VECT);
	IF ROT=1 THEN RETURN(" ("&RTPART&","&VTPART&")")
	   ELSE	RETURN(" ("&RTPART&","&VTPART&")");
	END;
END "OUTPUT"